超小型コンパイラTTC ――――――――――――――――――――――――――――――――――――――― Oh!X 1989年 6月号掲載 S−OS SWORD マシン語 TTC.SOS       03000H−0394FH S:03000H ソース TTC.ASC 起動方法 TTC.SOSをロード J3000 ――――――――――――――――――――――――――――――――――――――― 超小型コンパイラTTC TTCはアセンブラより小さなコンパイラです。 変数は原則として8ビット長のみという大胆な仕様により、 超小型化を実現しました。 さすかに低機能(?)ですが、 簡易開発ツールとして、 コンパイラの入門として使用してみてください。 ・――             ――・ |   Tiny Tiny Compiler   | ・――             ――・ TTC(Tiny Tiny Compiler)はS−OS“SWORD”上で動作する 1バイト型(変数は1バイト整数)のコンパイラです。 すでにS−OS上にはFuzzy BASICコンパイラや SLANGといった立派なコンパイラが発表されています。 今となってはお恥ずかしいものですが、 とにかくコンパクトですので、 ちょっとしたプログラムの作成に利用してください。 TTCの特徴としては、とにかくゴンパクトなことがあげられます。 ランタイムルーチンを含めても2Kバイト強しかない小さなコンパイラです。 言語仕様としては、tiny BASICを思い浮かべてもらえればいいしょう。 ただし、変数は8ビット無符号で 変数名にはアルファベット1文字のみ有効です(使用できる変数は26個)。 1パスでオブジェクトを出力しますので、 非常に高遠にコンパイルします。 演算の優先順位はなく、式の最適化は一切しないという とんでもないプログラムですが、 1バイト型のため生成されるオブジェクトはそれほど大きくないです。 また、機械語のプログラムを混在することができるようになっています。 プログラム中にラベルを使用することが 図1 メモリマップ ・――――――――――――――――――――――・ |                      | | $0000・――――・  $0000・――――・ | |    | S-OS |     | ラベル | | | $3000|――――|     | テーブル | | |    | TTC  |  $1000|――――| | |    |コンパイラ部|     | ラベル | | | $37D5|――――|     | ワーク  | | |    | TTC  |  $1FFF・――――・ | |    | ランタイム |    特殊ワークエリア   | |    | ルーチン |            | | $38E6|――――|            | |    | ワークエリア |            | | $3915・――――・            | |                      | ・――――――――――――――――――――――・ できますが、それには数値しか使えません。 GOTO、GOSUBでのラベルとコマンドのあいだには 必ず1個のスペースを入れてください。 ・――             ――・ |      入力&使用法     | ・――             ――・ 使用するプログラムはリスト1の1本だけです。 MACINTO−Cなどのマシン語入力ツールから打ち込んでください。 ソースで入力される方はZEDAを使ってください。 TTCは専用コンパイラなので、ソースプログラムは、 E−MATEなどのテキストエディタで作成してください。 ソースプログラムを入力あるいはロード後、 本プログラムを起動してください (スタートアドレスは3000H番地)。 コンパイラは次のような質問をしてくるので、 16進4桁で答えてください。 TEXT ADDRESS:   ソースプログラムの恪納番地 RUNTIME ADDRESS:   ランタイムルーチンの発生開始番地 VARIABLE TOP:   変数領域の先頭番地。変数Aがこの番地になります OBJECT ADDRESS:   オブジェクトプログラムの発生開始番地 OFFSET ADDRESS:   オフセットです。通常は0000とします 以上でコンパイルが開始されます。 しばらくすると、 オブジェクトの終了アドレスを表示してS−OSに戻ります。 なお、このアドレスはオフセットを含めた値なので注意してください。 エラーが出た場合は、エラーコード表を参照して エディタで修正して、再度コンパイルしてください。 無事コンパイルが終了したら、 ランタイムルーチン、オブジェクトが含まれる範囲でセーブしてください。 なお、ソースとオブジェクトは重ならないようにしてください。 また、ランタイムルーチンは 273バイト、変数領域は26バイトですので、 オブジェクトと重ならないようアドレスを決めてください。 ・――             ――・ |    サンプルプログラム    | ・――             ――・ リファレンスだけではわかりにくいので、 サンプルプログラムを作ってみました。 内容はよくあるモグラたたきです。 1〜8のキーでたたいてください。 ただし、頭が^のモグラをたたくと減点です。 得点になるモグラが50匹出終わったときと、 ^のモグラをたたきすぎて 点数がなくなった場合がゲームオーバーです。 ソースが4E00Hに入っていると仮定して (あらかじめエディタで読み込んでおく) コンパイルの手順を示します。 TTCを起動し、  TEXT ADDRESS :4E00  RUNTIME ADDRESS:6000  VARIABLE TOP :6120  OBJECT ADDRESS :6200  OFFSET ADDRESS :0000 と入力すると、 OBJECT ENDのアドレスを表示して終了します。 6000HからOBJECT ENDのアドレスの範囲で、 ジヤンプアドレス6200Hとしてセーブしてください。 実行はS−OSのモニタから J6200です。 ・――             ――・ |       最後に       | ・――             ――・ 行数や変数の制限などのため、 このコンパイラで 大きなプログラムを書くのには無理がありますが (もちろんやってできなくはない)、 アセンブラで書くほどもない ちょっとしたプログラムの作成にご利用ください。 また、PUT、GET命令を使えば、 機械語サブルーチン化ができます。 うまく使えば面白いこともできるでしょう。 ほとんど自己満足で作ったコンパイラですが、 どうか活用してください。